Problem
Time limit : 2sec / Memory limit : 256MB
我们有一个整数序列A,其长度是N
请找出其总和为0的A的非空邻接子序列的数目。请注意,我们正在计算取出子序列的方法。也就是说,即使某些两个子序列的内容相同,如果它们取自不同的位置,则对它们进行单独计数。
Solution
- n2的算法会超时
首先看样例
下标 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
数字 | 1 | 3 | -4 | 2 | 2 | -2 |
前缀和 | 1 | 4 | 0 | 2 | 4 | 2 |
我们可以发现相同的两个数之间之间经过的数的和一定是0;
例如第一个4和第二个4 之间是 −4+2+2=0所以我们发现规律:
- 只要找到相同的数的个数让他们之间两两连接就是个数
如果和为0代表从第一个开始到它的和就是0所以要额外加上0的个数
懒得离散化就用map
,反正能过233
Code: